package com.tedu.day02.oop;

/**
 * 抽象类：抽象类与抽象方法   关键字：abstract
 * 类：只能提供行为概念，没有具体实现行为
 *
 * 抽象类与面向对象  多态绝对关系【向上造型创建抽象对象】
 * 使用多态创建抽象类对象，抽象类本身无法创建是对象，需要使用多态完成抽象类创建
 *
 * 什么时使用抽象类？
 * 复杂项目时，需要在不同类下实现不同的功能，首选抽象类【安卓常用】
 *
 * 定义抽象类与抽象方法
 * 抽象类：修饰符 abstract class 类名{}   ----毫无意义，必须结合抽象方法
 * 抽象方法：修饰符  abstract 返回值 方法（参数）；   ----没有具体的实现
 *
 * 抽象类“实例化：创建对象” 抽象类自身无法实例化
 * ①创建子类【n个】子类 继承抽象【父】类 子类一定实现抽象 【父类】的所有抽象方法
 * ②使用面向对象：多态【向上造型】  抽象类 引用=new 【实现】子类（）；
 * 注意：抽象类一定发生重写，子类继承抽象父类，也可以叫做“实现类”
 */

 abstract class Animals{  //抽象类
    //抽象方法 没有具体的实现【代码块】----一定继承---一定多态性【造型】
    public abstract void say();
    //①定义由final修饰的抽象方法    ×
   //public final abstract void sleep();

    //②定义抽象的变量 ？            ×    11
     //abstract int i=1;

    //③定义静态变量  ？            √
    static int i=1;

    //④定义静态抽象变量 ？          ×   11
    //  static abstract int j=1;

    //⑤定义静态的抽象方法【无实现】?   ×
    //public static abstract void sell();

    //⑥定义静态的方法【无实现  空代码块】  √
    public static void play(){}
    //⑤⑥总结：抽象方法|静态方法，  方法定义：修饰符  static/abstract  返回值 方法名

    //⑦定义内部类：静态内部类        √
        static class sos{ }

    //⑧抽象类有构造器吗  ？        √
       public Animals(){}

    //⑨抽象类普通实现方法   ？      √  11
       public void run(){}
 }
//⑩抽象类可以继承抽象类？            √  实现：两个抽象类--形容一个实现
abstract class Thing extends Animals{
     public abstract void sleep();
}
//目的：两个抽象类中所有抽象方法--继承【子】抽象类


//实现类：实现抽象【父】类的方法---多个实现类--继承--抽象
         class People1 extends Animals{//报错原因：完成重写

           public void say() {
         System.out.println("人 说话");
     }

 }
public class 抽象类 {
    public static void main(String[] args) {
       //抽象类无法创建对象：提供抽象 方法  bicultural有子类是心啊  多态【造型】
        Animals a=new People1();
        a.say(); //向上造型--重写： 重写抽象父类的抽象方法【覆盖】
       // People1 p=(People1) a;

    }
}
